package com.shycloud.mido.member.service;

import java.util.List;
import java.util.Map;

import org.springframework.web.multipart.MultipartFile;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.shycloud.mido.common.core.util.R;
import com.shycloud.mido.member.api.dto.MemberDTO;
import com.shycloud.mido.member.api.dto.TeacherApprovalDTO;
import com.shycloud.mido.member.api.entity.LevelSetting;
import com.shycloud.mido.member.api.entity.Member;
import com.shycloud.mido.member.api.entity.MemberIdcard;
import com.shycloud.mido.member.api.entity.MemberOpinion;
import com.shycloud.mido.member.api.entity.MemberStudentInfo;
import com.shycloud.mido.member.api.vo.MemberLevelVO;
import com.shycloud.mido.member.api.vo.MemberVO;
import com.shycloud.mido.member.api.vo.TeacherVO;

/**
 * @author npc
 * @date 2018/11/14
 */
public interface MobileService {

	/**
	 * 发送手机注册验证码
	 *
	 * @param mobile mobile
	 * @return code
	 */
	R<Boolean> sendSmsCode(String mobile);

	R<Boolean> sendSmsRegisterCode(String mobile);

	/**
	 * 发送手机注册验证码
	 *
	 * @param mobile   mobile
	 * @param username username
	 * @param password password
	 * @param captcha  captcha
	 * @return code
	 */
	R<Boolean> registerBySmsCode(String mobile, String username, String password, String captcha);


	/**
	 * 完善学生信息
	 *
	 * @param memberStudentInfo memberStudentInfo
	 * @return code
	 */
	R<Boolean> saveStudentInfo(MemberStudentInfo memberStudentInfo);

	/**
	 * 完善个人信息
	 *
	 * @param memberDTO memberDTO
	 * @return code
	 */
	R<Boolean> saveMemberInfo(MemberDTO memberDTO);

	/**
	 * 金币消费记录
	 *
	 * @param page     页码
	 * @param memberId 会员ID
	 * @return
	 */
	R<Map<String, Object>> goldLog(Page page, String memberId);

	/**
	 * 会员充值记录
	 *
	 * @param page     页码
	 * @param memberId 会员ID
	 * @return
	 */
	R<Map<String, Object>> moneyLog(Page page, String memberId);

	/**
	 * 修改密码
	 *
	 * @param mobile      mobile
	 * @param captcha     captcha
	 * @param newpassword newpassword
	 * @return code
	 */
	R<Boolean> changePassword(String mobile, String captcha, String newpassword);

	/**
	 * 意见反馈
	 *
	 * @param memberOpinion memberOpinion
	 * @return code
	 */
	Boolean saveOpinion(MemberOpinion memberOpinion);

	/**
	 * 微信登录
	 *
	 * @param openid 微信号
	 * @return code
	 */
	R<Boolean> wxLogin(String openid);

	/**
	 * 微信绑定系统账号
	 *
	 * @param openid  微信号
	 * @param mobile  手机号
	 * @param captcha 验证码
	 * @return code
	 */
	R<Boolean> wxBind(String openid, String mobile, String captcha);

	/**
	 * 微信绑定注册账号
	 *
	 * @param openid   微信号
	 * @param mobile   手机号
	 * @param username 用户名
	 * @param password 密码
	 * @return code
	 */
	R<Boolean> wxRegister(String openid, String mobile, String username, String password);

	/**
	 * 上传头像
	 *
	 * @param file
	 * @param type
	 * @return
	 */
	R<String> updHeadPhoto(MultipartFile file, String type);

	/**
	 * 获取关联学生列表
	 *
	 * @param userid 会员id
	 * @return R
	 */
	R<List<Member>> getStudentList(String userid);

	/**
	 * 获取用户信息
	 *
	 * @param userid 会员id
	 * @return R
	 */
	R<MemberVO> getMemberInfo(String userid);

	/**
	 * 获取用户实名认证信息
	 *
	 * @param userid 会员id
	 * @return R
	 */
	R<MemberIdcard> getMemberIdcard(String userid);

	/**
	 * 绑定会员
	 *
	 * @param parentId  家长id
	 * @param studentId 学生id
	 * @return code
	 */
	R<Boolean> bindMember(String parentId, String studentId);

	/**
	 * 解绑会员
	 *
	 * @param parentId  家长id
	 * @param studentId 学生id
	 * @return code
	 */
	R<Boolean> unbindMember(String parentId, String studentId);

	/**
	 * 绑定新手机
	 *
	 * @param mobile  手机号
	 * @param captcha 验证码
	 * @return code
	 */
	Boolean bindPhone(String mobile, String captcha, String openId);

	/**
	 * 签到
	 *
	 * @param userid 会员id
	 * @return code
	 */
	R<Boolean> signIn(String userid);

	/**
	 * 认证教师
	 *
	 * @param teacherApprovalDTO teacherApprovalDTO
	 * @return code
	 */
	R<Boolean> approveTeacher(TeacherApprovalDTO teacherApprovalDTO);

	/**
	 * 获取会员考级信息
	 *
	 * @param userid 会员id
	 * @return R
	 */
	R<MemberStudentInfo> getStudentInfo(String userid);

	/**
	 * 获取教师信息
	 *
	 * @param userid 会员id
	 * @return R
	 */
	R<TeacherApprovalDTO> getTeacherInfo(String userid);

	/**
	 * 积分日志
	 *
	 * @param page     页码
	 * @param memberId 会员ID
	 * @return
	 */
	R<Map<String, Object>> pointsLog(Page page, String memberId);

	/**
	 * 是否签到
	 *
	 * @param userid 会员id
	 * @return code
	 */
	R<Boolean> isSigned(String userid);

	/**
	 * 获取用户经验值
	 *
	 * @param userid 会员id
	 * @return R
	 */
	R<MemberLevelVO> getLevel(String userid);

	/**
	 * 获取会员等级列表
	 *
	 * @return R
	 */
	R<List<LevelSetting>> levelSetting();

	/**
	 * 获取教师信息表信息
	 *
	 * @param memberId 会员id
	 * @return R
	 */
	R<TeacherVO> getTeacher(String memberId);

	/**
	 * 查询教师证书照片
	 *
	 * @param memberId memberId
	 * @return
	 */
	List<String> getTeacherProPic(String memberId);

	/**
	 * 查询教师科目Id
	 *
	 * @param memberId memberId
	 * @return
	 */
	List<String> getTeacherSubjectId(String memberId);

	/**
	 * 查询联系签到天数
	 *
	 * @param memberId
	 * @return
	 */
	int selSignCount(String memberId);

	/**
	 * 忘记密码
	 *
	 * @param phone
	 * @param pwd
	 * @return int
	 * @author nianhua.jiang
	 * @date 2020/6/29 13:44
	 */
	int forgetPwd(String phone, String pwd);

	Boolean iosBindPhone(String phone, String code, String userId);
}
